﻿using System;
using System.Drawing;
using AiFrame.InterfaceLib.Windows.Controls;

namespace AiFrame.InterfaceLib.MVP
{
    /// <summary>
    /// Delegate for the on click event.
    /// </summary>
    /// <param name="sender">The sender class.</param>
    /// <param name="e">Event arguments.</param>
    public delegate void OnClickProcedure(object sender, EventArgs e);

    /// <summary>
    /// Represents a navigation bar.
    /// </summary>
    public interface INavigationBar
    {
        /// <summary>
        /// Adds a button and returns the data navigation bar.
        /// </summary>
        /// <param name="name">The unique name of the button</param>
        /// <param name="caption">The caption of the button</param>
        /// <param name="hoverText">Hover text</param>
        /// <param name="image">The image of the button</param>
        /// <returns>The data navigation bar.</returns>
        IDataNavigationBar AddButton(string name, string caption, string hoverText,
                                     Image image);

        /// <summary>
        /// Adds a button with an existing data navigation bar.
        /// </summary>
        /// <param name="name">The unique name of the button</param>
        /// <param name="caption">The caption of the button</param>
        /// <param name="hoverText">Hover text</param>
        /// <param name="image">The image of the button</param>
        /// <param name="dataNavigationBar">The data navigation bar</param>
        /// <param name="clickProcedure">The procedure for the click event.</param>
        void AddButton(string name, string caption, string hoverText, Image image, 
            IDataNavigationBar dataNavigationBar, OnClickProcedure clickProcedure);

        /// <summary>
        /// Creates a new data navigation bar.
        /// </summary>
        /// <returns>The data navigation bar.</returns>
        IDataNavigationBar CreateDataNavigationBar();

        /// <summary>
        /// Sets the parent element.
        /// </summary>
        /// <param name="parent">The parent element.</param>
        void SetParent(object parent);

        /// <summary>
        /// Sets the docking properties.
        /// </summary>
        /// <param name="dockingStyle">Docking properties.</param>
        void SetDockingStyle(object dockingStyle);
    }
}